home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 4
/
Apprentice-Release4.iso
/
Languages
/
MacQForth 1.0
/
source
/
QF Source
/
QF.REGWRDS2.S
< prev
next >
Wrap
Text File
|
1995-03-06
|
10KB
|
158 lines
********************************
* Start regular words 2
********************************
*
* Word "abs" - return absolute value of top stack item
*
WORD63 ASC 'abs '
DW ABS
ABS JSR POPDATA
TXA
BPL GLOB_PUSH
NEGATSUB TYA
EOR #$FF
CLC
ADC #01
TAY
TXA
EOR #$FF
ADC #00
TAX
GLOB_PUSH JMP PUSHDATA
*
* Word "negate" - negate top value on stack
*
WORD64 ASC 'negate '
DW NEGATE
NEGATE JSR POPDATA
BRA NEGATSUB
*
* Word "<" - comparison operator
*
WORD65 ASC '< '
DW LESSTHAN
LESSTHAN JSR POPDATA ; Fetch first signed integer
STY PNTR
STX PNTR+1
JSR POPDATA ; Fetch second signed integer
TXA ; Actual comparison done here
EOR PNTR+1
AND #$80
BEQ :SAMESGN
TXA
BMI :TRUE
BRA :FALSE
:SAMESGN CPX PNTR+1
BNE :NOCHKLO
CPY PNTR
:NOCHKLO BCC :TRUE
:FALSE LDY #$00
LDX #$00
JMP PUSHDATA
:TRUE LDY #$FF
LDX #$FF
JMP PUSHDATA
*
* Word ">" - comparison operator
*
WORD66 ASC '> '
DW MORETHAN
MORETHAN JSR POPDATA ; Fetch first signed integer
STY PNTR
STX PNTR+1
JSR POPDATA ; Fetch second signed integer
TXA ; Actual comparison done here
EOR PNTR+1
AND #$80
BEQ :SAME
TXA
BPL :TRUE
BRA :FALSE
:SAME CPX PNTR+1
BNE :NOCHKLO
CPY PNTR
:NOCHKLO BCC :FALSE
BEQ :FALSE
:TRUE LDY #$FF
LDX #$FF
JMP PUSHDATA
:FALSE LDY #$00
LDX #$00
JMP PUSHDATA
*
* Word "=" - comparison operator
*
* Note: bypasses POPDATA, PUSHDATA for speed
*
WORD67 ASC '= '
DW EQUAL
EQUAL LDA DATITEMS ; Make sure there's at least
CMP #02 ; two items on stack
BCC :ERROR
LDY DATSTACK
LDA DATAAREA+1,Y
CMP DATAAREA+3,Y
BNE :FALSE
LDA DATAAREA+2,Y
CMP DATAAREA+4,Y
BNE :FALSE
LDA #$FF
HEX 2C
:FALSE LDA #00
STA DATAAREA+3,Y
STA DATAAREA+4,Y
INY ; Adjust data stack pointer
INY
STY DATSTACK
:SKIPINC DEC DATITEMS ; Adjust data items pointer
RTS
:ERROR LDA #04 ; "Data stack underflow"
JMP PRTERR
*
* Word "<>" - comparison operator
*
* Note: bypasses POPDATA, PUSHDATA for speed
*
WORD68 ASC '<> '
DW NOTEQUAL
NOTEQUAL LDA DATITEMS ; Make sure there's at least
CMP #02 ; two items on stack
BC